

#ifndef _C_MATH_H_
#define _C_MATH_H_

#include"stl_type.h"



/// <summary>
/// 计算sin函数。x = 0 处用泰勒展开： sin x = x - (1/3!)*x^3+ (1/5!)*x^5
/// 
/// sinf(x)在五次多项式空间上的正交投影就是对sin(x)的最佳五次多项式逼近，这个近似在整个周期内的精度都非常高。
/// 这个五次多项式的表达式是  y = 0.987862x - 0.155271x ^ 3 + 0.00564312x ^ 5
/// </summary>
/// <param name="theta">弧度制角度。3.14表示180度</param>
/// <returns>sin的值</returns>
real_t c_sin(real_t theta);

/// <summary>
/// 计算cos函数。直接调用c_cos函数计算。
/// </summary>
/// <param name="theta">弧度制角度。3.14表示180度</param>
/// <returns>cos的值</returns>
real_t c_cos(real_t theta);

/// <summary>
/// 计算tan的反函数。
/// </summary>
/// <param name="tan">tan 函数的值</param>
/// <returns>tan对应的角度，-PI/2 ~ PI/2</returns>
real_t c_atan(real_t tan);

/// <summary>
/// tan = y/x.  计算这个点与x轴的角度
/// </summary>
/// <param name="y">y坐标</param>
/// <param name="x">x坐标</param>
/// <returns>tan对应的角度，-PI ~ PI</returns>
real_t c_atan2(real_t y, real_t x);


/// <summary>
/// 返回均匀分布的随机数。最小标准随机数生成器
/// </summary>
/// <param name="min">随机数的最小值</param>
/// <param name="max">随机数的最大值</param>
/// <returns>均匀分布的随机数</returns>
real_t random_ave(real_t min, real_t max);

/// <summary>
/// 高斯随机变量生成函数
/// </summary>
/// <param name="ave">高斯分布均值</param>
/// <param name="sigma">高斯分布的标准差</param>
/// <returns>高斯随机数</returns>
real_t random_gauss_as(real_t ave, real_t sigma);

/// <summary>
/// 高斯随机变量生成函数
/// </summary>
/// <returns>高斯随机数，均值0，方差1</returns>
real_t random_gauss(void);


/// <summary>
/// 高斯随机变量生成函数。
/// </summary>
/// <param name="ave">高斯分布均值</param>
/// <param name="sigma">高斯分布的标准差</param>
/// <returns>高斯随机数</returns>
real_t random_gauss_ss(real_t ave, real_t sigma);


/// <summary>
/// 返回均匀分布的随机数。最小标准随机数生成器。在【-1，1】之间分布。
/// </summary>
/// <returns>均匀分布的随机数</returns>
real_t random11(void);

/// <summary>
/// 返回均匀分布的随机数。最小标准随机数生成器。在【0，1】之间分布。
/// </summary>
/// <returns>均匀分布的随机数</returns>
real_t random01(void);



#endif



